Softwaredesign er processen hvor en agent skaber en specifikation for en softwareartifakt, hvis intention er at opnå et mål, ved brug af primitive komponenter og underlagt restriktioner.[1] Software design kan referere til enten "alt aktivitet involveret i at konceptualisere, frame, implementere, idriftsættelse, og ultimativt modificere komplekse systemer" eller "aktiviteten der følger efter specifikationskrav og før programmering, som ... [i] en stiliseret softwareingeniørproces."[2]
Softwaredesign involverer som regel problemløsning og planlægning af en softwareløsning. Dette inkluderer både low-level komponenter og algoritmedesign, og et high-level arkitekturdesign.